
// MIT License
// 
// Copyright (c) 2009-2017 Luca Piccioni
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// 
// This file is automatically generated

#pragma warning disable 649, 1572, 1573

// ReSharper disable RedundantUsingDirective
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;

using Khronos;

// ReSharper disable CheckNamespace
// ReSharper disable InconsistentNaming
// ReSharper disable JoinDeclarationAndInitializer

namespace OpenGL
{
	public partial class Gl
	{
		/// <summary>
		/// [GL] Value of GL_BUFFER_GPU_ADDRESS_NV symbol.
		/// </summary>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public const int BUFFER_GPU_ADDRESS_NV = 0x8F1D;

		/// <summary>
		/// [GL] Value of GL_GPU_ADDRESS_NV symbol.
		/// </summary>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public const int GPU_ADDRESS_NV = 0x8F34;

		/// <summary>
		/// [GL] Value of GL_MAX_SHADER_BUFFER_ADDRESS_NV symbol.
		/// </summary>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public const int MAX_SHADER_BUFFER_ADDRESS_NV = 0x8F35;

		/// <summary>
		/// [GL] glMakeBufferResidentNV: Binding for glMakeBufferResidentNV.
		/// </summary>
		/// <param name="target">
		/// A <see cref="T:int"/>.
		/// </param>
		/// <param name="access">
		/// A <see cref="T:int"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void MakeBufferResidentNV(int target, int access)
		{
			Debug.Assert(Delegates.pglMakeBufferResidentNV != null, "pglMakeBufferResidentNV not implemented");
			Delegates.pglMakeBufferResidentNV(target, access);
			LogCommand("glMakeBufferResidentNV", null, target, access			);
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glMakeBufferNonResidentNV: Binding for glMakeBufferNonResidentNV.
		/// </summary>
		/// <param name="target">
		/// A <see cref="T:int"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void MakeBufferNonResidentNV(int target)
		{
			Debug.Assert(Delegates.pglMakeBufferNonResidentNV != null, "pglMakeBufferNonResidentNV not implemented");
			Delegates.pglMakeBufferNonResidentNV(target);
			LogCommand("glMakeBufferNonResidentNV", null, target			);
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glIsBufferResidentNV: Binding for glIsBufferResidentNV.
		/// </summary>
		/// <param name="target">
		/// A <see cref="T:int"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static bool IsBufferResidentNV(int target)
		{
			bool retValue;

			Debug.Assert(Delegates.pglIsBufferResidentNV != null, "pglIsBufferResidentNV not implemented");
			retValue = Delegates.pglIsBufferResidentNV(target);
			LogCommand("glIsBufferResidentNV", retValue, target			);
			DebugCheckErrors(retValue);

			return (retValue);
		}

		/// <summary>
		/// [GL] glMakeNamedBufferResidentNV: Binding for glMakeNamedBufferResidentNV.
		/// </summary>
		/// <param name="buffer">
		/// A <see cref="T:uint"/>.
		/// </param>
		/// <param name="access">
		/// A <see cref="T:int"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void MakeNamedBufferResidentNV(uint buffer, int access)
		{
			Debug.Assert(Delegates.pglMakeNamedBufferResidentNV != null, "pglMakeNamedBufferResidentNV not implemented");
			Delegates.pglMakeNamedBufferResidentNV(buffer, access);
			LogCommand("glMakeNamedBufferResidentNV", null, buffer, access			);
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glMakeNamedBufferNonResidentNV: Binding for glMakeNamedBufferNonResidentNV.
		/// </summary>
		/// <param name="buffer">
		/// A <see cref="T:uint"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void MakeNamedBufferNonResidentNV(uint buffer)
		{
			Debug.Assert(Delegates.pglMakeNamedBufferNonResidentNV != null, "pglMakeNamedBufferNonResidentNV not implemented");
			Delegates.pglMakeNamedBufferNonResidentNV(buffer);
			LogCommand("glMakeNamedBufferNonResidentNV", null, buffer			);
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glIsNamedBufferResidentNV: Binding for glIsNamedBufferResidentNV.
		/// </summary>
		/// <param name="buffer">
		/// A <see cref="T:uint"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static bool IsNamedBufferResidentNV(uint buffer)
		{
			bool retValue;

			Debug.Assert(Delegates.pglIsNamedBufferResidentNV != null, "pglIsNamedBufferResidentNV not implemented");
			retValue = Delegates.pglIsNamedBufferResidentNV(buffer);
			LogCommand("glIsNamedBufferResidentNV", retValue, buffer			);
			DebugCheckErrors(retValue);

			return (retValue);
		}

		/// <summary>
		/// [GL] glGetBufferParameterui64vNV: Binding for glGetBufferParameterui64vNV.
		/// </summary>
		/// <param name="target">
		/// A <see cref="T:BufferTarget"/>.
		/// </param>
		/// <param name="pname">
		/// A <see cref="T:int"/>.
		/// </param>
		/// <param name="params">
		/// A <see cref="T:ulong[]"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void GetBufferParameterNV(BufferTarget target, int pname, [Out] ulong[] @params)
		{
			unsafe {
				fixed (ulong* p_params = @params)
				{
					Debug.Assert(Delegates.pglGetBufferParameterui64vNV != null, "pglGetBufferParameterui64vNV not implemented");
					Delegates.pglGetBufferParameterui64vNV((int)target, pname, p_params);
					LogCommand("glGetBufferParameterui64vNV", null, target, pname, @params					);
				}
			}
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glGetNamedBufferParameterui64vNV: Binding for glGetNamedBufferParameterui64vNV.
		/// </summary>
		/// <param name="buffer">
		/// A <see cref="T:uint"/>.
		/// </param>
		/// <param name="pname">
		/// A <see cref="T:VertexBufferObjectParameter"/>.
		/// </param>
		/// <param name="params">
		/// A <see cref="T:ulong[]"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void GetNamedBufferParameterNV(uint buffer, VertexBufferObjectParameter pname, [Out] ulong[] @params)
		{
			unsafe {
				fixed (ulong* p_params = @params)
				{
					Debug.Assert(Delegates.pglGetNamedBufferParameterui64vNV != null, "pglGetNamedBufferParameterui64vNV not implemented");
					Delegates.pglGetNamedBufferParameterui64vNV(buffer, (int)pname, p_params);
					LogCommand("glGetNamedBufferParameterui64vNV", null, buffer, pname, @params					);
				}
			}
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glGetIntegerui64vNV: Binding for glGetIntegerui64vNV.
		/// </summary>
		/// <param name="value">
		/// A <see cref="T:GetPName"/>.
		/// </param>
		/// <param name="result">
		/// A <see cref="T:ulong[]"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void GetIntegerNV(GetPName value, [Out] ulong[] result)
		{
			unsafe {
				fixed (ulong* p_result = result)
				{
					Debug.Assert(Delegates.pglGetIntegerui64vNV != null, "pglGetIntegerui64vNV not implemented");
					Delegates.pglGetIntegerui64vNV((int)value, p_result);
					LogCommand("glGetIntegerui64vNV", null, value, result					);
				}
			}
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glUniformui64NV: Binding for glUniformui64NV.
		/// </summary>
		/// <param name="location">
		/// A <see cref="T:int"/>.
		/// </param>
		/// <param name="value">
		/// A <see cref="T:ulong"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void UniformNV(int location, ulong value)
		{
			Debug.Assert(Delegates.pglUniformui64NV != null, "pglUniformui64NV not implemented");
			Delegates.pglUniformui64NV(location, value);
			LogCommand("glUniformui64NV", null, location, value			);
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glUniformui64vNV: Binding for glUniformui64vNV.
		/// </summary>
		/// <param name="location">
		/// A <see cref="T:int"/>.
		/// </param>
		/// <param name="value">
		/// A <see cref="T:ulong[]"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void UniformNV(int location, ulong[] value)
		{
			unsafe {
				fixed (ulong* p_value = value)
				{
					Debug.Assert(Delegates.pglUniformui64vNV != null, "pglUniformui64vNV not implemented");
					Delegates.pglUniformui64vNV(location, value.Length, p_value);
					LogCommand("glUniformui64vNV", null, location, value.Length, value					);
				}
			}
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glGetUniformui64vNV: Binding for glGetUniformui64vNV.
		/// </summary>
		/// <param name="program">
		/// A <see cref="T:uint"/>.
		/// </param>
		/// <param name="location">
		/// A <see cref="T:int"/>.
		/// </param>
		/// <param name="params">
		/// A <see cref="T:ulong[]"/>.
		/// </param>
		[RequiredByFeature("GL_AMD_gpu_shader_int64")]
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void GetUniformNV(uint program, int location, [Out] ulong[] @params)
		{
			unsafe {
				fixed (ulong* p_params = @params)
				{
					Debug.Assert(Delegates.pglGetUniformui64vNV != null, "pglGetUniformui64vNV not implemented");
					Delegates.pglGetUniformui64vNV(program, location, p_params);
					LogCommand("glGetUniformui64vNV", null, program, location, @params					);
				}
			}
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glProgramUniformui64NV: Binding for glProgramUniformui64NV.
		/// </summary>
		/// <param name="program">
		/// A <see cref="T:uint"/>.
		/// </param>
		/// <param name="location">
		/// A <see cref="T:int"/>.
		/// </param>
		/// <param name="value">
		/// A <see cref="T:ulong"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void ProgramUniformNV(uint program, int location, ulong value)
		{
			Debug.Assert(Delegates.pglProgramUniformui64NV != null, "pglProgramUniformui64NV not implemented");
			Delegates.pglProgramUniformui64NV(program, location, value);
			LogCommand("glProgramUniformui64NV", null, program, location, value			);
			DebugCheckErrors(null);
		}

		/// <summary>
		/// [GL] glProgramUniformui64vNV: Binding for glProgramUniformui64vNV.
		/// </summary>
		/// <param name="program">
		/// A <see cref="T:uint"/>.
		/// </param>
		/// <param name="location">
		/// A <see cref="T:int"/>.
		/// </param>
		/// <param name="value">
		/// A <see cref="T:ulong[]"/>.
		/// </param>
		[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
		public static void ProgramUniformNV(uint program, int location, ulong[] value)
		{
			unsafe {
				fixed (ulong* p_value = value)
				{
					Debug.Assert(Delegates.pglProgramUniformui64vNV != null, "pglProgramUniformui64vNV not implemented");
					Delegates.pglProgramUniformui64vNV(program, location, value.Length, p_value);
					LogCommand("glProgramUniformui64vNV", null, program, location, value.Length, value					);
				}
			}
			DebugCheckErrors(null);
		}

		internal static unsafe partial class Delegates
		{
			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glMakeBufferResidentNV(int target, int access);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glMakeBufferResidentNV pglMakeBufferResidentNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glMakeBufferNonResidentNV(int target);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glMakeBufferNonResidentNV pglMakeBufferNonResidentNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			[return: MarshalAs(UnmanagedType.I1)]
			internal delegate bool glIsBufferResidentNV(int target);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glIsBufferResidentNV pglIsBufferResidentNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glMakeNamedBufferResidentNV(uint buffer, int access);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glMakeNamedBufferResidentNV pglMakeNamedBufferResidentNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glMakeNamedBufferNonResidentNV(uint buffer);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glMakeNamedBufferNonResidentNV pglMakeNamedBufferNonResidentNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			[return: MarshalAs(UnmanagedType.I1)]
			internal delegate bool glIsNamedBufferResidentNV(uint buffer);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glIsNamedBufferResidentNV pglIsNamedBufferResidentNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glGetBufferParameterui64vNV(int target, int pname, ulong* @params);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glGetBufferParameterui64vNV pglGetBufferParameterui64vNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glGetNamedBufferParameterui64vNV(uint buffer, int pname, ulong* @params);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glGetNamedBufferParameterui64vNV pglGetNamedBufferParameterui64vNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glGetIntegerui64vNV(int value, ulong* result);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glGetIntegerui64vNV pglGetIntegerui64vNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glUniformui64NV(int location, ulong value);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glUniformui64NV pglUniformui64NV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glUniformui64vNV(int location, int count, ulong* value);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glUniformui64vNV pglUniformui64vNV;

			[RequiredByFeature("GL_AMD_gpu_shader_int64")]
			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glGetUniformui64vNV(uint program, int location, ulong* @params);

			[RequiredByFeature("GL_AMD_gpu_shader_int64")]
			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glGetUniformui64vNV pglGetUniformui64vNV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glProgramUniformui64NV(uint program, int location, ulong value);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glProgramUniformui64NV pglProgramUniformui64NV;

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[SuppressUnmanagedCodeSecurity]
			internal delegate void glProgramUniformui64vNV(uint program, int location, int count, ulong* value);

			[RequiredByFeature("GL_NV_shader_buffer_load", Api = "gl|glcore")]
			[ThreadStatic]
			internal static glProgramUniformui64vNV pglProgramUniformui64vNV;

		}
	}

}
